﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using GalaSoft.MvvmLight;
using wp8nop.Common;
using System.Diagnostics;

namespace wp8nop
{
    public class Provincia
    {
        public string Descrizione { get; set; }
        public string ID { get; set; }
        public Provincia(string desc, string id)
        {
            Descrizione = desc;
            ID = id;
        }
    }

    public partial class Registrazione : PhoneApplicationPage
    {
        List<Provincia> province = new List<Provincia>();
        public Registrazione()
        {
            InitializeComponent();
            province.Add( new Provincia("Agrigento", "AG"));
            province.Add( new Provincia("Alessandria", "AL"));
            province.Add( new Provincia("Ancona", "AN"));
            province.Add( new Provincia("Aosta", "AO"));
            province.Add( new Provincia("Arezzo", "AR"));
            province.Add( new Provincia("Ascoli Piceno", "AP"));
            province.Add( new Provincia("Asti", "AT"));
            province.Add( new Provincia("Avellino", "AV"));
            province.Add( new Provincia("Bari", "BA"));
            province.Add( new Provincia("Barletta-Andria-Trani", "BT"));
            province.Add( new Provincia("Belluno", "BL"));
            province.Add( new Provincia("Benevento", "BN"));
            province.Add( new Provincia("Bergamo", "BG"));
            province.Add( new Provincia("Biella", "BI"));
            province.Add( new Provincia("Bologna", "BO"));
            province.Add( new Provincia("Bolzano", "BZ"));
            province.Add( new Provincia("Brescia", "BS"));
            province.Add( new Provincia("Brindisi", "BR"));
            province.Add( new Provincia("Cagliari", "CA"));
            province.Add( new Provincia("Caltanissetta", "CL"));
            province.Add( new Provincia("Campobasso", "CB"));
            province.Add( new Provincia("Carbonia-Iglesias", "CI"));
            province.Add( new Provincia("Caserta", "CE"));
            province.Add( new Provincia("Catania", "CT"));
            province.Add( new Provincia("Catanzaro", "CZ"));
            province.Add( new Provincia("Chieti", "CH"));
            province.Add( new Provincia("Como", "CO"));
            province.Add( new Provincia("Cosenza", "CS"));
            province.Add( new Provincia("Cremona", "CR"));
            province.Add( new Provincia("Crotone", "KR"));
            province.Add( new Provincia("Cuneo", "CN"));
            province.Add( new Provincia("Enna", "EN"));
            province.Add( new Provincia("Fermo", "FM"));
            province.Add( new Provincia("Ferrara", "FE"));
            province.Add( new Provincia("Firenze", "FI"));
            province.Add( new Provincia("Foggia", "FG"));
            province.Add( new Provincia("Forlì-Cesena", "FC"));
            province.Add( new Provincia("Frosinone", "FR"));
            province.Add( new Provincia("Genova", "GE"));
            province.Add( new Provincia("Gorizia", "GO"));
            province.Add( new Provincia("Grosseto", "GR"));
            province.Add( new Provincia("Imperia", "IM"));
            province.Add( new Provincia("Isernia", "IS"));
            province.Add( new Provincia("La Spezia", "SP"));
            province.Add( new Provincia("L Aquila", "AQ"));
            province.Add( new Provincia("Latina", "LT"));
            province.Add( new Provincia("Lecce", "LE"));
            province.Add( new Provincia("Lecco", "LC"));
            province.Add( new Provincia("Livorno", "LI"));
            province.Add( new Provincia("Lodi", "LO"));
            province.Add( new Provincia("Lucca", "LU"));
            province.Add( new Provincia("Macerata", "MC"));
            province.Add( new Provincia("Mantova", "MN"));
            province.Add( new Provincia("Massa-Carrara", "MS"));
            province.Add( new Provincia("Matera", "MT"));
            province.Add( new Provincia("Messina", "ME"));
            province.Add( new Provincia("Milano", "MI"));
            province.Add( new Provincia("Modena", "MO"));
            province.Add( new Provincia("Monza e della Brianza", "MB"));
            province.Add( new Provincia("Napoli", "NA"));
            province.Add( new Provincia("Novara", "NO"));
            province.Add( new Provincia("Nuoro", "NU"));
            province.Add( new Provincia("Olbia-Tempio", "OT"));
            province.Add( new Provincia("Oristano", "OR"));
            province.Add( new Provincia("Padova", "PD"));
            province.Add( new Provincia("Palermo", "PA"));
            province.Add( new Provincia("Parma", "PR"));
            province.Add( new Provincia("Pavia", "PV"));
            province.Add( new Provincia("Perugia", "PG"));
            province.Add( new Provincia("Pesaro e Urbino", "PU"));
            province.Add( new Provincia("Pescara", "PE"));
            province.Add( new Provincia("Piacenza", "PC"));
            province.Add( new Provincia("Pisa", "PI"));
            province.Add( new Provincia("Pistoia", "PT"));
            province.Add( new Provincia("Pordenone", "PN"));
            province.Add( new Provincia("Potenza", "PZ"));
            province.Add( new Provincia("Prato", "PO"));
            province.Add( new Provincia("Ragusa", "RG"));
            province.Add( new Provincia("Ravenna", "RA"));
            province.Add( new Provincia("Reggio Calabria", "RC"));
            province.Add( new Provincia("Reggio Emilia", "RE"));
            province.Add( new Provincia("Rieti", "RI"));
            province.Add( new Provincia("Rimini", "RN"));
            province.Add( new Provincia("Roma", "RM"));
            province.Add( new Provincia("Rovigo", "RO"));
            province.Add( new Provincia("Salerno", "SA"));
            province.Add( new Provincia("Medio Campidano", "VS"));
            province.Add( new Provincia("Sassari", "SS"));
            province.Add( new Provincia("Savona", "SV"));
            province.Add( new Provincia("Siena", "SI"));
            province.Add( new Provincia("Siracusa", "SR"));
            province.Add( new Provincia("Sondrio", "SO"));
            province.Add( new Provincia("Taranto", "TA"));
            province.Add( new Provincia("Teramo", "TE"));
            province.Add( new Provincia("Terni", "TR"));
            province.Add( new Provincia("Torino", "TO"));
            province.Add( new Provincia("Ogliastra", "OG"));
            province.Add( new Provincia("Trapani", "TP"));
            province.Add( new Provincia("Trento", "TN"));
            province.Add( new Provincia("Treviso", "TV"));
            province.Add( new Provincia("Trieste", "TS"));
            province.Add( new Provincia("Udine", "UD"));
            province.Add( new Provincia("Varese", "VA"));
            province.Add( new Provincia("Venezia", "VE"));
            province.Add( new Provincia("Verbano-Cusio-Ossola", "VB"));
            province.Add( new Provincia("Vercelli", "VC"));
            province.Add( new Provincia("Verona", "VR"));
            province.Add( new Provincia("Vibo Valentia", "VV"));
            province.Add(new Provincia("Vicenza", "VI"));

            lpProvince.ItemsSource = province;
            lpProvince.SelectedIndex = 0;

            this.Loaded += Registrazione_Loaded;

        }

        void Registrazione_Loaded(object sender, RoutedEventArgs e)
        {

        }

        private void Accedi_Click(object sender, RoutedEventArgs e)
        {
            if (tbemail.Text.Trim() == "")
            {
                Toast.SendToast("Inserisci l'email");
                return;
            }

            if (tbpassword.Password.Trim() == "")
            {
                Toast.SendToast("Inserisci la password");
                return;
            }

            progress.IsIndeterminate = true;
            nopService.NopServiceClient client = new nopService.NopServiceClient();
            client.ValidateUserCompleted +=client_ValidateUserCompleted;
            client.ValidateUserAsync(tbemail.Text.Trim(), tbpassword.Password.Trim());
        }

        void client_ValidateUserCompleted(object sender, nopService.ValidateUserCompletedEventArgs e)
        {
            progress.IsIndeterminate = false;
            if (e.Error != null)
                Toast.SendToast("Si è verificato un errroe di comunicazione con i nostri server, provare più tardi");

            else
            {
                Debug.WriteLine("Result: " + e.Result.ToString());
                if (e.Result > 0)
                {
                    App.IDUtente = e.Result;
                    App.SaveAccount(tbemail.Text.Trim(), tbpassword.Password.Trim());
                }
                else
                {
                    Toast.SendToast("email o password errate");
                }
            }
        }

        private void Registrati_Click(object sender, RoutedEventArgs e)
        {
            if (tbemail.Text.Trim() == "")
            {
                Toast.SendToast("Inserisci un email");
                return;
            }

            if (tbpassword.Password.Trim() == "")
            {
                Toast.SendToast("Inserisci una password");
                return;
            } 
            if (tbnome.Text.Trim() == "")
            {
                Toast.SendToast("Inserisci il nome");
                return;
            }
            if (tbcognome.Text.Trim() == "")
            {
                Toast.SendToast("Inserisci il cognome");
                return;
            }
            if (tbindirizzo.Text.Trim() == "")
            {
                Toast.SendToast("Inserisci l'indirizzo");
                return;
            }
            if (tbcap.Text.Trim() == "")
            {
                Toast.SendToast("Inserisci il CAP");
                return;
            }
            if (tbcitta.Text.Trim() == "")
            {
                Toast.SendToast("Inserisci la città");
                return;
            }
            if (lpProvince.SelectedIndex < 0)
            {
                Toast.SendToast("Seleziona la provincia");
                return;
            }
            progress.IsIndeterminate = true;
            nopService.NopServiceClient client = new nopService.NopServiceClient();
            client.RegisterUserCompleted += client_RegisterUserCompleted;
            client.RegisterUserAsync(tbnome.Text.Trim(), tbcognome.Text.Trim(), tbindirizzo.Text.Trim(), tbcap.Text.Trim(), (lpProvince.SelectedItem as Provincia).ID, tbcitta.Text.Trim(), "IT", tbemail.Text.Trim(), tbpassword.Password.Trim());
        }

        void client_RegisterUserCompleted(object sender, nopService.RegisterUserCompletedEventArgs e)
        {
            progress.IsIndeterminate = false;
            if (e.Error != null)
                Toast.SendToast("Si è verificato un errroe di comunicazione con i nostri server, provare più tardi");

            else
            {
                Debug.WriteLine("Result: " + e.Result.ToString());
                if (e.Result.esito == 0)
                {
                    App.IDUtente = e.Result.iduser;
                    App.SaveAccount(tbemail.Text.Trim(), tbpassword.Password.Trim());
                    NavigationService.Navigate(new Uri("/SceltaPagamento.xaml", UriKind.Relative));
                }
                else
                {
                    Toast.SendToast(e.Result.message);
                }
            }
        }
    }
}